#!/usr/bin/env python
# -*- coding: utf-8 -*-
# Time       :   19:38
# Author     : Y4
# Site       : 
# File       : 04 面向对象-4种常见的魔术方法.py
# Software   : PyCharm

'''
__init__  初始化魔术方法
触发时机 : 初始化对象时出发(不是实例化出发,但是和实例化在一个操作里)

__new__   实例化的魔术方法
触发时机 : 实例化的时候出发

__call__  对象调用方法
触发时机 : 实例化对象当做函数调用的时候自动触发


__str__   可以自定义打印对象时输出的内容
触发时机 : 使用print打印对象的时候触发

'''


class Phone:
    def __new__(cls, *args, **kwargs):
        print('1',args)
        return object.__new__(cls)

    def __init__(self, brand, color, size, price):
        print("2",brand, color, size, price)
        self.brand = brand
        self.color = color
        self.size = size
        self.price = price

    def __call__(self, *args, **kwargs):
        print("3",args)

    def __str__(self):
        return f'__str__魔术方法 ： 使用颜色:{self.color},{self.brand}的手机,{self.size}寸的,{self.price}人民币的手机在拨打电话'

    # 普通方法
    def call(self):
        print(f'普通方法 ： 使用颜色:{self.color},{self.brand}的手机,{self.size}寸的,{self.price}人民币的手机在拨打电话')


phone1 = Phone("华为", "red", 64, 4999)  # 实例化类  __news__方法 __init__方法

phone1("哈哈")  # __call__方法

print(phone1)  # __str__方法

phone1.call()  # 调用普通方法


'''
1 ('华为', 'red', 64, 4999)
2 华为 red 64 4999
3 ('哈哈',)
__str__魔术方法 ： 使用颜色:red,华为的手机,64寸的,4999人民币的手机在拨打电话
普通方法 ： 使用颜色:red,华为的手机,64寸的,4999人民币的手机在拨打电话
'''